package beans;

import java.util.ArrayList;
import java.util.List;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;

import util.Fachada;

import Controladores.ControladorIngresso;
import Controladores.ControladorPedido;
import basicas.Evento;
import basicas.FormaPagamento;
import basicas.Ingresso;
import basicas.Pedido;
import basicas.StatusPedido;

@ManagedBean
@SessionScoped
public class PedidoBean {

	public Pedido pedido = new Pedido();
	private ControladorPedido controladorPedido = new ControladorPedido();
	private Ingresso ingresso = new Ingresso();
	private Ingresso[] selectedIngressos;
	public List<Ingresso> listIngressos = new ArrayList<Ingresso>();
	public Pedido pedidoEnviado;

	public void adicionar() {
		try {
			controladorPedido.salvar(pedido);
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

	public Pedido getPedido() {
		return pedido;
	}

	public void setPedido(Pedido pedido) {
		this.pedido = pedido;
	}

	public List<Pedido> getAllPedido() {
		return controladorPedido.listarPedido();
	}

	public Integer getAllPedidoSize() {
		return controladorPedido.listarPedido().size();
	}

	public Ingresso getIngresso() {
		return ingresso;
	}

	public void setIngresso(Ingresso ingresso) {
		this.ingresso = ingresso;
	}

	public List<Ingresso> getIngressos() {

		List<Ingresso> listTemp = new ArrayList<Ingresso>();

		listTemp = Fachada.obterInstancia().listarIngresso();

		List<Ingresso> list = new ArrayList<Ingresso>();

		for (Ingresso ingresso : listTemp) {
			if ((ingresso.getPedido() == null && ingresso.isIrAoCarrinho())) {
				list.add(ingresso);
			}
		}
		return list;
	}


	public String montarPedido() {
		double valorPedido = 0;
		
		for (Ingresso ing : selectedIngressos) {
			listIngressos.add(ing);
			valorPedido += ing.getValorIngresso();

		}
		
		pedidoEnviado = new Pedido(null, valorPedido, StatusPedido.ABERTO);

		for (Ingresso ingresso : listIngressos) {
			ingresso.setPedido(pedidoEnviado);
			ingresso.setIrAoCarrinho(false);
			
			Fachada.obterInstancia().salvar(pedidoEnviado);
			Fachada.obterInstancia().salvar(ingresso);
		}
        
		
		return "TelaFinalizarCompra.xhtml?faces-redirect=true";
	}

	public int getIngressosSize() {
		return Fachada.obterInstancia().listarIngresso().size();
	}

	public Ingresso[] getSelectedIngressos() {
		return selectedIngressos;
	}

	public void setSelectedIngressos(Ingresso[] selectedIngressos) {
		this.selectedIngressos = selectedIngressos;
	}

	public String excluir() {
		try {
			for (Ingresso ingresso : selectedIngressos) {
				ingresso.setIrAoCarrinho(false);
				ingresso.setPedido(null);
				Fachada.obterInstancia().salvar(ingresso);
				
			}
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return "CarrinhoDeCompras.xhtml?faces-redirect=true";
	}

	
	

	//PARTE CICERO
	private String tipoPagamento;
	private double valorPago;
	public List<Ingresso> getListIngressos() {
		return listIngressos;
	}

	
	private double valorTroco;
	 private FormaPagamento formaPagamento = new FormaPagamento();
	 
	public void calcularTroco() {

		valorTroco = (valorPago - pedidoEnviado.getValorPedido());
		System.out.println(valorTroco);
	    pedido.setValorPedido(pedidoEnviado.getValorPedido() );
	}
	
	public String finalizarPedido(){
		
		FormaPagamento formaPagamento = new FormaPagamento(tipoPagamento, pedidoEnviado);

	    this.getPedidoEnviado().setStatusPedido(StatusPedido.FECHADO);

		Fachada.obterInstancia().salvar(formaPagamento);
		Fachada.obterInstancia().salvar(getPedidoEnviado());
		
		if (pedidoEnviado != null){
			pedidoEnviado = null;
			
		}
		
		return "TelaFinalizarCompra.xhtml?faces-redirect=true";
}
	
	public List<Ingresso> getListarIngressosFinalizarCompra(){
		
		List<Ingresso> listaIngresso = Fachada.obterInstancia().listarIngresso();
		
		List<Ingresso> listaTemp  = new ArrayList<Ingresso>();
		
		for (Ingresso ingresso : listaIngresso) {
			if(ingresso.getPedido()!=null)
			{
				if (ingresso.getPedido().getStatusPedido() == StatusPedido.ABERTO){
				listaTemp.add(ingresso);
				}
			}
		}
	
		return listaTemp;
	}
	
	
	public String getTipoPagamento() {
		return tipoPagamento;
	}

	public void setTipoPagamento(String tipoPagamento) {
		this.tipoPagamento = tipoPagamento;
	}

	public FormaPagamento getFormaPagamento() {
		return formaPagamento;
	}

	public void setFormaPagamento(FormaPagamento formaPagamento) {
		this.formaPagamento = formaPagamento;
	}
	public void setListIngressos(List<Ingresso> listIngressos) {
		this.listIngressos = listIngressos;
	}

	public Pedido getPedidoEnviado() {
		return pedidoEnviado;
	}

	public void setPedidoEnviado(Pedido pedidoEnviado) {
		this.pedidoEnviado = pedidoEnviado;
	}

	public double getValorPago() {
		return valorPago;
	}

	public void setValorPago(double valorPago) {
		this.valorPago = valorPago;
	}

	public double getValorTroco() {
		return valorTroco;
	}

	public void setValorTroco(double valorTroco) {
		this.valorTroco = valorTroco;
	}

}
